#include <stdexcept>
#include <iostream>
#include <fstream>
#include "Util/Configuracion.h"
#include "Operacion/Indexar/Indice.h"
#include "Operacion/Consultar/Consulta.h"
#include "Manejador_Operaciones/Manejador.h"

std::string validar_argumentos(char* cadena){
        std::string opcion(cadena);
        if ((opcion.compare(OPCION_INDICE)!=0)&& (opcion.compare(OPCION_CONSULTA)!=0))
                throw std::invalid_argument(MSJ_ARG2);
        return opcion;
}

int main(int argc, char* argv[]){
    try{
        if (argc-1!= N_ARG) throw std::invalid_argument(MSJ_ARG);
        std::string opcion(validar_argumentos(argv[POS_OPCION]));
        std::string objetivo(argv[POS_OBJETIVO]);
        Manejador manejador;


        (opcion.compare(OPCION_INDICE)==0)?
        		(manejador.asignar_operacion(new Indice(objetivo))):
        			(manejador.asignar_operacion(new Consulta(objetivo)));


        manejador.inicio();
    }
        catch (const std::invalid_argument& ex){
                std::cerr<<"Ha ocurrido un error. "<<ex.what()<<std::endl;
                std::cerr<<"Uso:\n\t./TPGRUPOXX opción "<<COMILLA<<"Objetivo"<<COMILLA<<std::endl;
                std::cerr<<"Opciones:\n\t-i\t indexar el path indicado como objetivo"<<std::endl;
                std::cerr<<"\t-q\tConsultar cuàles documentos contienen la/las frases indicadas como objetivo."<<std::endl;
        }
        catch (const Excepcion_Operacion& ex_op){
                std::cerr<<"Ha ocurrido un error. "<<ex_op.what()<<std::endl;
        }
    return 0;
}
